package com.wufeng.mycode;

import java.math.BigDecimal;

public class FloatDemo {
    public static void main(String[] args) {
        // 浮点数之间的等值判断，基本数据类型不能用==来比较，包装类型不能用equals来判断。
        // 说明：浮点数采用“尾数+阶码”的编码方式，类似于科学计数法的“有效数字+指数”的表示方式。二进
        // 错误展示如下：
        float a = 1.0f - 0.9f;
        float b = 0.9f - 0.8f;
        if (a == b) {
            // 预期进入此判断，实际没有进入
            System.out.println(true);
        }
        Float x = Float.valueOf(a);
        Float y = Float.valueOf(b);
        if(x.equals(y)){
            System.out.println(true);
        }
        // 正例
        // 1、指定一个误差范围，两个浮点数差值在这个范围之内，则认为是相等。
        float diff = 1e-6f;
        System.out.println(diff);
        if(Math.abs(a - b) < diff) {
            System.out.println("true");
        }
        // 2、使用BigDecimal来定义值，再进行浮点数的运算操作。
        BigDecimal num1 = BigDecimal.valueOf(0.1);
        BigDecimal num2 = BigDecimal.valueOf(0.9);
        BigDecimal num3 = BigDecimal.valueOf(0.8);

        System.out.println(num1);
        System.out.println(num2);
        System.out.println(num3);

        BigDecimal num4 = num1.subtract(num2);
        BigDecimal num5 = num2.subtract(num3);

        if (num4.equals(num5)) {
            System.out.println("true");
        }
    }
}
